﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Input.Touch;
using Microsoft.Xna.Framework.Media;
using Services;
using System.IO;

namespace SpaceSlideShow
{
  public interface ISlide { }

  public class PictureSlide : ISlide
  {
    public string Path;
  }

  public class TextSlide : ISlide
  {
    public string Title;
    public string[] Bullets;
    public bool use_arrows;
  }
  
  public static class Slides
  {
    //public static IEnumerable<ISlide> MSP_2010_Slides
    //{
    //  get
    //  {
    //    yield return new TextSlide
    //    {
    //      Title = "XNA Academic Program 2010/2011",
    //      Bullets = new[]{
    //                    "Giuseppe Maggiore",
    //                    "XNA Metro Trainer",
    //                    "PhD Student - Venice"
    //                },
    //      use_arrows = false
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Agenda",
    //      Bullets = new[]{
    //                    "ALM",
    //                    "XNA",
    //                    "Imagine Cup",
    //                    "Windows Phone 7",
    //                    "WP7 Marketplace",
    //                    "XNA Training"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "ALM",
    //      Bullets = new[]{
    //                    "Materiali su FC",
    //                    "Interessano a TUTTI i CdL",
    //                    "Professionalmente\n   fondamentali"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "XNA",
    //      Bullets = new[]{
    //                    "Futuro del game dev",
    //                    "Managed DirectX++",
    //                    "C#"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "XNA",
    //      Bullets = new[]{
    //                    "Grafica 2D e 3D",
    //                    "TouchPanel, Audio, \n   Accelerometro, ...",
    //                    "Gaming Services"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "",
    //      Bullets = new[]{
    //                    "XNA DEMO"
    //                },
    //      use_arrows = false
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Imagine Cup",
    //      Bullets = new[]{
    //                    "Game Dev XNA 4.0"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Windows Phone 7",
    //      Bullets = new[]{
    //                    "Nuova piattaforma\n   mobile",
    //                    "Supporta XNA 4.0"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Windows Phone 7",
    //      Bullets = new[]{
    //                    "XBox Live!",
    //                    "Ubiquitous Gaming\n   Service"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Windows Phone 7",
    //      Bullets = new[]{
    //                    "Interessante per \n   docenti di HMI",
    //                    "Interessante per \n   docenti di CG",
    //                    "Soft Skillz Rulez"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "WP7 Marketplace",
    //      Bullets = new[]{
    //                    "Store di applicazioni",
    //                    "Opportunitá per \n   indie game devs!"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Training",
    //      Bullets = new[]{
    //                    "Materiali su FC",
    //                    "WP7 & XNA",
    //                    "Via web",
    //                    "MASSIMO INTERESSE \n   (da me e da voi ♥)"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Training",
    //      Bullets = new[]{
    //                    "WP7 & XNA",
    //                    "Di persona",
    //                    "Selezionati \"by hand\"!"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "This is it!",
    //      Bullets = new[]{
    //                    "THANK YOU",
    //                },
    //      use_arrows = false
    //    };
    //  }
    //}

    //public static IEnumerable<ISlide> REMIX_2010_Slides
    //{
    //  get
    //  {
    //    for (int i = 1; i < 9; i++)
    //    {
    //      yield return new PictureSlide
    //      {
    //        Path = @"intro\slide" + i.ToString()
    //      };
    //    }
    //    yield return new TextSlide
    //    {
    //      Title = "XNA Game Studio",
    //      Bullets = new[]{
    //                    "Sviluppo di videogiochi",
    //                    "Basato su DirectX 9\n   (DirectX 10 coming)",
    //                    "Framework completo",
    //                    "Basato su .Net e C#"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Solo .Net?",
    //      Bullets = new[]{
    //                    "Niente codice unsafe",
    //                    "C# é un linguaggio\n   capace di alta performance",
    //                    "800+ giochi XNA su\n   XBLA e XBLIG"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "I Tre Device",
    //      Bullets = new[]{
    //                    "Windows",
    //                    "XBox 360",
    //                    "WP7"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "I Tre Device",
    //      Bullets = new[]{
    //                    "Reach",
    //                    "HiDef"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Consistenza Hardware WP7",
    //      Bullets = new[]{
    //                    "Risoluzione",
    //                    "Touch",
    //                    "CPU/GPU",
    //                    "RAM",
    //                    "Tastiera opzionale"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Emulatore",
    //      Bullets = new[]{
    //                    "Completo",
    //                    "Costi ridotti di test\n   e sviluppo",
    //                    "Emulatore, non \n   simulatore"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Ciclo di sviluppo",
    //      Bullets = new[]{
    //                    "Sviluppo e profiling\n   su Windows",
    //                    "Testing su emulatore",
    //                    "Testing su Device"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Content Pipeline",
    //      Bullets = new[]{
    //                    "Gestione dei contenuti\n   in Visual Studio",
    //                    "Importers per files \n   comuni",
    //                    "Rende veloce il \n   caricamento",
    //                    "Nasconde i diversi\n   filesystem"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Demo",
    //      Bullets = new[]{
    //                    "Content Pipeline"
    //                },
    //      use_arrows = false
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Modello dell'Applicazione",
    //      Bullets = new[]{
    //                    "Prima riga di \n   codice é del\n   gioco",
    //                    "Eventi Load, Update\n   e Draw"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Modello dell'Applicazione",
    //      Bullets = new[]{
    //                    "Componenti: Load, \n   Update e Draw",
    //                    "Servizi: interoperazione\n   tra i componenti"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Demo",
    //      Bullets = new[]{
    //                    "App Model"
    //                },
    //      use_arrows = false
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "SpriteBatch 2D",
    //      Bullets = new[]{
    //                    "Textures e SpriteFonts",
    //                    "SpriteBatch (Begin,\n   Draw/DrawString, End)"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Demo",
    //      Bullets = new[]{
    //                    "SpriteBatch 2D",
    //                },
    //      use_arrows = false
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "3D e Matrici",
    //      Bullets = new[]{
    //                    "World = entitá (SxRxT)",
    //                    "View = camera (TxR)",
    //                    "Projection = camera"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Entitá 3D",
    //      Bullets = new[]{
    //                    "Textures e SpriteFont",
    //                    "Model"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Demo",
    //      Bullets = new[]{
    //                    "3D"
    //                },
    //      use_arrows = false
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Effetto",
    //      Bullets = new[]{
    //                    "Applica matrici per\n   disegnare la scena"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Effetti Predefiniti",
    //      Bullets = new[]{
    //                    "Basic",
    //                    "DualTexture",
    //                    "EnvironmentMap",
    //                    "Skinned",
    //                    "AlphaTest"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Demo",
    //      Bullets = new[]{
    //                    "Effects"
    //                },
    //      use_arrows = false
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Input e Sensori",
    //      Bullets = new[]{
    //                    "TouchPanel",
    //                    "Tastiera",
    //                    "Accelerometro",
    //                    "Location",
    //                    "Vibrazione"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Demo",
    //      Bullets = new[]{
    //                    "Input e Sensori"
    //                },
    //      use_arrows = false
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Audio",
    //      Bullets = new[]{
    //                    "Playback di WAV/WMV",
    //                    "Volume, effetti 3D",
    //                    "Audio bufferizzato e\n   sintetizzato",
    //                    "Cattura da microfono"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Media",
    //      Bullets = new[]{
    //                    "Importazione dei\n   media dell'utente",
    //                    "Riproduzione musica\n   da URL",
    //                    "Cattura e editing di foto",
    //                    "Player video"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Gamer Services",
    //      Bullets = new[]{
    //                    "Avatar",
    //                    "Achievements",
    //                    "Leaderboards",
    //                    "Trial Mode"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Scaler automatico",
    //      Bullets = new[]{
    //                    "Alta qualitá",
    //                    "Hardware dedicato",
    //                    "Scaling del tocco"
    //                },
    //      use_arrows = true
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Demo",
    //      Bullets = new[]{
    //                    "Space Battle"
    //                },
    //      use_arrows = false
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "",
    //      Bullets = new[]{
    //                    "This is it!"
    //                },
    //      use_arrows = false
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Test su device",
    //      Bullets = new[]{
    //                    "Labs",
    //                    "lorenzo.barbieri@microsoft.com"
    //                },
    //      use_arrows = false
    //    };
    //    yield return new TextSlide
    //    {
    //      Title = "Thank you",
    //      Bullets = new[]{
    //                    "XNA help?",
    //                    "giuseppemag@student-partners.com",
    //                    "blogs.academicclub.org/xna"
    //                },
    //      use_arrows = false
    //    };
    //    yield return new PictureSlide()
    //    {
    //      Path = "EndSlide1"
    //    };
    //    yield return new PictureSlide()
    //    {
    //      Path = "EndSlide2"
    //    };
    //    yield return new PictureSlide()
    //    {
    //      Path = "endofslideshow"
    //    };
    //  }
    //}

    public static IEnumerable<ISlide> VENICE_CAMP_2010_Slides
    {
      get
      {
        for (int i = 1; i < 9; i++)
        {
          yield return new PictureSlide
          {
            Path = @"intro venicecamp\slide" + i.ToString()
          };
        }
        yield return new TextSlide
        {
          Title = "XNA Game Studio",
          Bullets = new[]{
                        "Sviluppo di videogiochi",
                        "Basato su DirectX 9\n   (DirectX 10 coming)",
                        "Framework completo",
                        "Basato su .Net e C#"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Solo .Net?",
          Bullets = new[]{
                        "Niente codice unsafe",
                        "C# é un linguaggio\n   capace di alta performance",
                        "800+ giochi XNA su\n   XBLA e XBLIG"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "I Tre Device",
          Bullets = new[]{
                        "Windows",
                        "XBox 360",
                        "WP7"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "I Tre Device",
          Bullets = new[]{
                        "Reach",
                        "HiDef"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Consistenza Hardware WP7",
          Bullets = new[]{
                        "Risoluzione",
                        "Touch",
                        "CPU/GPU",
                        "RAM",
                        "Tastiera opzionale"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Emulatore",
          Bullets = new[]{
                        "Completo",
                        "Costi ridotti di test\n   e sviluppo",
                        "Emulatore, non \n   simulatore"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Ciclo di sviluppo",
          Bullets = new[]{
                        "Sviluppo e profiling\n   su Windows",
                        "Testing su emulatore",
                        "Testing su Device"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Content Pipeline",
          Bullets = new[]{
                        "Gestione dei contenuti\n   in Visual Studio",
                        "Importers per files \n   comuni",
                        "Rende veloce il \n   caricamento",
                        "Nasconde i diversi\n   filesystem"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Demo",
          Bullets = new[]{
                        "Content Pipeline"
                    },
          use_arrows = false
        };
        yield return new TextSlide
        {
          Title = "Modello dell'Applicazione",
          Bullets = new[]{
                        "Prima riga di \n   codice é del\n   gioco",
                        "Eventi Load, Update\n   e Draw"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Modello dell'Applicazione",
          Bullets = new[]{
                        "Componenti: Load, \n   Update e Draw",
                        "Servizi: interoperazione\n   tra i componenti"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Demo",
          Bullets = new[]{
                        "App Model"
                    },
          use_arrows = false
        };
        yield return new TextSlide
        {
          Title = "SpriteBatch 2D",
          Bullets = new[]{
                        "Textures e SpriteFonts",
                        "SpriteBatch (Begin,\n   Draw/DrawString, End)"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Demo",
          Bullets = new[]{
                        "SpriteBatch 2D",
                    },
          use_arrows = false
        };
        yield return new TextSlide
        {
          Title = "3D e Matrici",
          Bullets = new[]{
                        "World = entitá (SxRxT)",
                        "View = camera (TxR)",
                        "Projection = camera"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Entitá 3D",
          Bullets = new[]{
                        "Textures e SpriteFont",
                        "Model"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Demo",
          Bullets = new[]{
                        "3D"
                    },
          use_arrows = false
        };
        yield return new TextSlide
        {
          Title = "Effetto",
          Bullets = new[]{
                        "Applica matrici per\n   disegnare la scena"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Effetti Predefiniti",
          Bullets = new[]{
                        "Basic",
                        "DualTexture",
                        "EnvironmentMap",
                        "Skinned",
                        "AlphaTest"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Demo",
          Bullets = new[]{
                        "Effects"
                    },
          use_arrows = false
        };
        yield return new TextSlide
        {
          Title = "Input e Sensori",
          Bullets = new[]{
                        "TouchPanel",
                        "Tastiera",
                        "Accelerometro",
                        "Location",
                        "Vibrazione"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Demo",
          Bullets = new[]{
                        "Input e Sensori"
                    },
          use_arrows = false
        };
        yield return new TextSlide
        {
          Title = "Audio",
          Bullets = new[]{
                        "Playback di WAV/WMV",
                        "Volume, effetti 3D",
                        "Audio bufferizzato e\n   sintetizzato",
                        "Cattura da microfono"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Media",
          Bullets = new[]{
                        "Importazione dei\n   media dell'utente",
                        "Riproduzione musica\n   da URL",
                        "Cattura e editing di foto",
                        "Player video"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Gamer Services",
          Bullets = new[]{
                        "Avatar",
                        "Achievements",
                        "Leaderboards",
                        "Trial Mode"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Scaler automatico",
          Bullets = new[]{
                        "Alta qualitá",
                        "Hardware dedicato",
                        "Scaling del tocco"
                    },
          use_arrows = true
        };
        yield return new TextSlide
        {
          Title = "Demo",
          Bullets = new[]{
                        "Space Battle"
                    },
          use_arrows = false
        };
        yield return new TextSlide
        {
          Title = "",
          Bullets = new[]{
                        "This is it!"
                    },
          use_arrows = false
        };
        yield return new TextSlide
        {
          Title = "Test su device",
          Bullets = new[]{
                        "Labs",
                        "lorenzo.barbieri@microsoft.com"
                    },
          use_arrows = false
        };
        yield return new TextSlide
        {
          Title = "Thank you",
          Bullets = new[]{
                        "XNA help?",
                        "giuseppemag@student-partners.com",
                        "blogs.academicclub.org/xna"
                    },
          use_arrows = false
        };
        yield return new PictureSlide()
        {
          Path = "endofslideshow"
        };
      }
    }

  }
}